using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Collections;
using BoekenUsb4.Model;
using BoekenUsb4.View.Printen;
using BoekenUsb4.View.BeherenBestanden;

namespace BoekenUsb4.View
{
    public partial class AfhalingCreatie : Form
    {
        private bool scanning;
        private int vLeerlingID;
        private string vGroepCode;
        public enum AfhaalStatus {Update,Nieuw};
        private int vAantalLijnen = 0;
        private DataGridViewCellStyle dataGridViewCellStyle = new DataGridViewCellStyle();
        private bool selecteerAan;

        public AfhalingCreatie(bool scanning)
        {
            InitializeComponent();
            this.BackColor = InstParameters.Default.schermkleur;
            this.scanning = scanning;
            selecteerAan = true;
            //dataGridViewCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
            dataGridViewCellStyle.BackColor = System.Drawing.Color.LightGray;
            //dataGridViewCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            dataGridViewCellStyle.ForeColor = System.Drawing.Color.Red;
            dataGridViewCellStyle.SelectionBackColor = System.Drawing.SystemColors.Highlight;
            dataGridViewCellStyle.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
            dataGridViewCellStyle.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
        }

        private void AfhalingCreatie_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek' table. You can move, or remove it, as needed.
            //this.leerlingBoekBestelling_BoekTableAdapter.Fill(this.onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Groep' table. You can move, or remove it, as needed.
            this.groepTableAdapter.Fill(this.onsBoekenPakketDataSet.Groep);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Leerling' table. You can move, or remove it, as needed.
            this.leerlingTableAdapter.Fill(this.onsBoekenPakketDataSet.Leerling);
            try { cmbGroep_SelectedIndexChanged(null, null); }
            catch (Exception) { ;}
           //try { cmbLeerling.SelectedIndex = 0; cmbLeerling_SelectedIndexChanged(null, null); }
           // catch (Exception) { ;}
            //instellen startwaarden
            cmbOpmerking.Items.Add("Geen standaard opmerking");
            if (InstParameters.Default.vPrintOpmerkingID1.Length > 0) cmbOpmerking.Items.Add(InstParameters.Default.vPrintOpmerkingID1);
            if (InstParameters.Default.vPrintOpmerkingID2.Length > 0) cmbOpmerking.Items.Add(InstParameters.Default.vPrintOpmerkingID2);
            if (InstParameters.Default.vPrintOpmerkingID3.Length > 0) cmbOpmerking.Items.Add(InstParameters.Default.vPrintOpmerkingID3);
            cmbOpmerking.SelectedIndex = 0;
            nudAantalExemplaren.Value = InstParameters.Default.vPrintRekeningAantal;
            if (InstParameters.Default.vPrintRekeningGroepOpVak) rbtPerVak.Checked = true;
            else rbtPerHuur.Checked = true;
            chkDrukRekening.Checked = InstParameters.Default.vAfhalenDrukRekening;
            chkFilterNogAfTeHalen.Checked = InstParameters.Default.vAfhalenFilterNogAfTeHalen;
            chkMaakRekening.Checked = InstParameters.Default.vAfhalenMaakRekening;
            chkNietOpNaam.Checked =  InstParameters.Default.vAfhalenNietOpNaam;
            chkRekeningBetaald.Checked = InstParameters.Default.vAfhalenRekeningBetaald;
            rbtAangerekendeBoeken.Checked = InstParameters.Default.vAfhalenAangerekendeBoeken;
            rbtBesteldeBoeken.Checked = InstParameters.Default.vAfhalenBesteldeBoeken;
            rbtBoeklijst.Checked =  InstParameters.Default.vAfhalenBoeklijst;
            chkDrukRekening.Visible = !InstParameters.Default.vVerbergAfdrukkenRekening ;
            rbtBoeklijst.Visible = !InstParameters.Default.vVerbergAfhalenViaBoekenlijst;
            rbtBesteldeBoeken.Visible = !InstParameters.Default.vVerbergViaBestelling ;
            rbtAangerekendeBoeken.Visible =  !InstParameters.Default.vVerbergAfhalenViaBoekenlijst;
            chkNietOpNaam.Visible = !InstParameters.Default.vVerbergAfhalingNietOpNaam;
            chkMaakRekening.Visible = !InstParameters.Default.vVerbergMaakRekening;
            btnUpdateRekeningMetAnnulatie.Visible = !InstParameters.Default.vVerbergUpdateRekeningMetAnnulatie;
            btnUpdateRekening.Visible = !InstParameters.Default.vVerbergUpdateRekeningZonderAnnulatie;
            
           
        }

        private void cmbGroep_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                string vgroep = cmbGroep.SelectedValue.ToString();
                vGroepCode = vgroep;
                leerlingBindingSource1.RemoveFilter();
                leerlingBindingSource1.Filter = "groepCode = " + "'" + vgroep + "'";
                leerlingBindingSource1.Sort = "naam";
                try { lbLeerling.SelectedIndex = 0; lbLeerling_SelectedIndexChanged(null,null); }
                catch (Exception ex) { ;}
            }
            catch (Exception ex) { ;}
        }

        private void btnZoekBoek_Click(object sender, EventArgs e)
        {
            bool inBoeklijsten = false;
            string zoek = "%" + txtDeelTitel.Text.Trim() + "%";
            ZoekBoek zoekBoek = new ZoekBoek(this,zoek,inBoeklijsten);
            txtDeelTitel.Text = "";
            zoekBoek.ShowDialog();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            txtIsbn.Text = "9789030195412";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            txtIsbn.Text = "9789028925731";
        }

        private void button3_Click(object sender, EventArgs e)
        {
            txtIsbn.Text = "9789028929074";
        }
        private void wisBrowser()
        {
            while (onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows.Count > 0)
                onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows.RemoveAt(0);
        }    

        private void vullenViaBestellijstOfRekeningLijst(bool bestelLijst)
        {
            wisBrowser();
            bool magToevoegen = true;
            int vBoeklijstIemID = 0;
            DataTable dt = leerlingBoekBestelling_BoekTableAdapter.GetByLeerlingIDGesorteerd(vLeerlingID);
            DataRow dr = null;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                magToevoegen = true;
                dr = dt.Rows[i];
                if (chkFilterNogAfTeHalen.Checked)
                {
                    if (dr["datumAfhaling"] != DBNull.Value)
                        magToevoegen = false;
                }
                if (magToevoegen)
                {
                    if (bestelLijst)
                    {
                        if (dr["datumBestelling"] == DBNull.Value)
                            magToevoegen = false;
                    }
                    else
                        if (dr["rekeningID"] == DBNull.Value)
                            magToevoegen = false;
                }
                if (magToevoegen)
                {
                    vBoeklijstIemID = int.Parse(dr["boeklijstItemID"].ToString());
                    voegToeAanLeerlingBoek(AfhaalStatus.Update, dr, vBoeklijstIemID);
                }
            }
            //oude versie (werkt niet goed met in in gridview omwille van sort en filter);
            /* 
            leerlingBoekBestelling_BoekTableAdapter.FillByLeerlingID(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek, vLeerlingID);
            leerlingBoekBestelling_BoekBindingSource.EndEdit();
            string filterTekst = "";
            if (chkFilterNogAfTeHalen.Checked)
                filterTekst = "datumAfhaling IS null AND ";

            if (bestelLijst)

                filterTekst += "datumBestelling NOT IS null";
            else
                filterTekst += "rekeningID NOT IS null";
            leerlingBoekBestelling_BoekBindingSource.Filter = filterTekst;
            leerlingBoekBestelling_BoekBindingSource.Sort = "categorieCode";
            for (int i = 0; i < leerlingBoekBestelling_BoekDataGridView.Rows.Count; i++)
            {
                leerlingBoekBestelling_BoekDataGridView.Rows[i].Cells["dgvSelecteer"].Value = true;
                if (!onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[i]["datumAfhaling"].ToString().Equals(DBNull.Value.ToString()))
                {
                    leerlingBoekBestelling_BoekDataGridView.Rows[i].DefaultCellStyle = dataGridViewCellStyle;
                    leerlingBoekBestelling_BoekDataGridView.Rows[i].ReadOnly = true;
                    leerlingBoekBestelling_BoekDataGridView.Rows[i].Cells["dgvSelecteer"].Value = false;
                }
                if (!onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[i]["rekeningID"].ToString().Equals(DBNull.Value.ToString()))
                {
                    leerlingBoekBestelling_BoekDataGridView.Rows[i].Cells["dgvOpRekening"].Value = true;
                }
            }
            berekenTotalen();
             */ 
        }

        private void vullenViaBoeklijst()
        {
            wisBrowser();
                        
            string vIsbnNr = "";
            int vBoeklijstIemID = 0;
            DataTable dt2 = null;
            DataTable dt = boeklijst_BoekTableAdapter.GetDataByGroepCode(vGroepCode);
            DataRow dr = null;
            for (int i = 0;i< dt.Rows.Count;i++)
            {
                vIsbnNr = dt.Rows[i]["isbnNr"].ToString();
               
               vBoeklijstIemID = int.Parse(dt.Rows[i]["boeklijstItemID"].ToString());

                dt2 = leerlingBoekBestelling_BoekTableAdapter.GetDataByIsbnEnLeerlingID(vIsbnNr, vLeerlingID);
                if (dt2.Rows.Count > 0)
                {
                    dr = dt2.Rows[0];
                    voegToeAanLeerlingBoek(AfhaalStatus.Update, dr,vBoeklijstIemID);
                }
                else
                {
                    dr = dt.Rows[i];
                    voegToeAanLeerlingBoek(AfhaalStatus.Nieuw, dr,vBoeklijstIemID);
                }
            }
        }

        public void setTxtIsbn(string vIsbnNr)
        {
            txtIsbn.Text = vIsbnNr;
        }

        private void txtIsbn_TextChanged(object sender, EventArgs e)
        {
            //ALLEEN BOEKEN UIT BOEKENLIJSTEN KUNNEN WORDEN AFGEHAALD!!!
            
            if (txtIsbn.Text.Length == 13)
            {
                //boekTableAdapter.FillByIsbnNr(onsBoekenPakketDataSet.Boek,txtIsbn.Text);
                //Text = "Aantal " + onsBoekenPakketDataSet.Tables["Boek"].Rows.Count;
                if (!chkNietOpNaam.Checked &&  isDubbelBoek(txtIsbn.Text))
                    lblFoutMelding.Text = "Boek is REEDS gescand voor deze leerling!!!";
                else
                {
                    bool gevondenInBoekLijsten = false;
                    DataTable dt = leerlingBoekBestelling_BoekTableAdapter.GetDataByIsbnEnLeerlingID(txtIsbn.Text,vLeerlingID);
                    bool gevondenInLeerlingBoek =  dt.Rows.Count  >=1;
                    if (chkNietOpNaam.Checked) gevondenInLeerlingBoek = false;
                    if (!gevondenInLeerlingBoek)
                    {
                        if (chkNietOpNaam.Checked) dt = boeklijst_BoekTableAdapter.GetDataByIsbnNr(txtIsbn.Text);//boekTableAdapter.GetDataByIsbnNr(txtIsbn.Text);
                        else boeklijst_BoekTableAdapter.GetDataByGroepCodeEnIsbn(vGroepCode, txtIsbn.Text);
                        gevondenInBoekLijsten = dt.Rows.Count >= 1;
                        if (!gevondenInBoekLijsten)
                            lblFoutMelding.Text = "ISBN nr NIET gevonden in boekenlijsten!!!";
                        else
                        {
                            lblFoutMelding.Text = "???";
                            int vBoeklijstItemID = 0;
                            //DataTable dt2 = boeklijst_BoekTableAdapter.GetDataByGroepCodeEnIsbn(vGroepCode,txtIsbn.Text);
                            if (dt.Rows.Count > 0)
                                vBoeklijstItemID = int.Parse(dt.Rows[0]["boeklijstItemID"].ToString());
                            voegToeAanLeerlingBoek(AfhaalStatus.Nieuw, dt.Rows[0], vBoeklijstItemID);
                        }
                    }
                    else
                    {
                        lblFoutMelding.Text = "???";
                        voegToeAanLeerlingBoek(AfhaalStatus.Update, dt.Rows[0], int.Parse(dt.Rows[0]["boeklijstItemID"].ToString()));
                    }
                }
                txtIsbn.Text = "";
            }
            
        }

        private bool isDubbelBoek(string vIsbnNr)
        {
            return leerlingBoekBestelling_BoekBindingSource.Find("isbnNr", vIsbnNr) > -1;
        }

        public void voegToeAanLeerlingBoek(AfhaalStatus vStatus, DataRow dr, int vBoeklijstItemID)
        {
            int index = 0;
            int vRekeningID = -1;
            int vvStatus = 0;
            int vBoekID = int.Parse(dr["boekID"].ToString());
            DateTime vDatumBestelling = DateTime.MinValue;
            DateTime vDatumAfhaling = DateTime.MinValue; 
            string vTitel = dr["Titel"].ToString();
            string vCatCode = dr["categorieCode"].ToString();
            string vUitgeverCode = dr["uitgeverCode"].ToString();
            string vIsnbNr = dr["isbnNr"].ToString();
            decimal vHuurPrijs = 0;
            try { vHuurPrijs = decimal.Parse(dr["huurPrijs"].ToString()); }
            catch (Exception ex) { ;}
            decimal vSchoolPrijs = 0;
            try { vSchoolPrijs = decimal.Parse(dr["schoolPrijs"].ToString()); }
            catch (Exception ex) { ;}
            int vLeerlingBoekID = -1;
            bool vHuur = false;
            //if (rbtHuur.Checked) vHuur = true;
            try { if (bool.Parse(dr["huurboek"].ToString())) vHuur = true; }
            catch (Exception) { ;}
            if (vStatus == AfhaalStatus.Update)
            {
                try { vRekeningID = int.Parse(dr["rekeningID"].ToString()); }
                catch (Exception) { ;}
                vvStatus = int.Parse(dr["status"].ToString());
                vLeerlingBoekID =  int.Parse(dr["leerlingBoekID"].ToString());
                vHuur = bool.Parse(dr["huurboek"].ToString());
                try { vDatumBestelling = DateTime.Parse(dr["datumBestelling"].ToString()); }
                catch (Exception) { ;}
                try { vDatumAfhaling = DateTime.Parse(dr["datumAfhaling"].ToString()); }
                catch (Exception) { ;}
            }
            bool toevoegen = true;
            if (vStatus == AfhaalStatus.Update && chkFilterNogAfTeHalen.Checked && vDatumAfhaling != DateTime.MinValue) toevoegen = false;
            if (toevoegen)
            {
                if (chkNietOpNaam.Checked) vLeerlingID = -1;
                onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.AddLeerlingBoekBestelling_BoekRow(vBoekID,
                    "", vCatCode, vDatumBestelling, vDatumAfhaling, DateTime.Now, DateTime.Now, vvStatus, vLeerlingID, 0, vLeerlingBoekID, vHuur, vSchoolPrijs, vHuurPrijs, vBoeklijstItemID, vRekeningID, 0, vIsnbNr, "", vUitgeverCode, vTitel, "", false, false, 0, 0, 0, "", "");
                index = onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows.Count - 1;

                if (onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["datumBestelling"].ToString().Equals(DateTime.MinValue.ToString()))
                    onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["datumBestelling"] = DBNull.Value;
                if (onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["datumAfhaling"].ToString().Equals(DateTime.MinValue.ToString()))
                    onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["datumAfhaling"] = DBNull.Value;
                onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["datumAnnulatie"] = DBNull.Value;
                onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["datumRetour"] = DBNull.Value;
                onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["rekeningID"] = DBNull.Value;
                if (vRekeningID != -1)
                    leerlingBoekBestelling_BoekDataGridView.Rows[index].Cells["dgvOpRekening"].Value = true;
                leerlingBoekBestelling_BoekDataGridView.Rows[index].Cells["dgvSelecteer"].Value = true;
                //if (!onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["datumAfhaling"].ToString().Equals(DBNull.Value.ToString()))
                if (int.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.Rows[index]["status"].ToString()) == 2)
                {
                    leerlingBoekBestelling_BoekDataGridView.Rows[index].DefaultCellStyle = dataGridViewCellStyle;
                    leerlingBoekBestelling_BoekDataGridView.Rows[index].ReadOnly = true;
                    leerlingBoekBestelling_BoekDataGridView.Rows[index].Cells["dgvSelecteer"].Value = false;
                }
                //string filterTekst = "";
                //if (chkFilterNogAfTeHalen.Checked)
                //   filterTekst = "datumAfhaling IS null";
                //leerlingBoekBestelling_BoekBindingSource.Filter = filterTekst;
                berekenTotalen();
            }


            /*onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.AddLeerlingBoekBestelling_BoekRow(0,"",
            onsBoekenPakketDataSet.
            if (vStatus == AfhaalStatus.Update)
            */
        }

        private void berekenTotalen()
        {
            int j = 0;
            int vAantal = 0;
            decimal vTotaal = 0.000M;
            foreach (DataRow dr in onsBoekenPakketDataSet.Tables["LeerlingBoekBestelling_boek"].Rows)
            {
                try
                {
                    if (bool.Parse(leerlingBoekBestelling_BoekDataGridView.Rows[j++].Cells["dgvSelecteer"].Value.ToString()))
                    {
                        if (bool.Parse(dr["huurboek"].ToString()))
                            vTotaal += decimal.Parse(dr["huurPrijs"].ToString());
                        else
                            vTotaal += decimal.Parse(dr["schoolPrijs"].ToString());
                    }
                }
                catch (Exception) { ;}
            }
            lblTotaalBedrag.Text = vTotaal.ToString().Substring(0, vTotaal.ToString().Length - 1); ;

            for (int i = 0;i < leerlingBoekBestelling_BoekDataGridView.Rows.Count; i++)
            {
                try
                {
                    if (bool.Parse(leerlingBoekBestelling_BoekDataGridView.Rows[i].Cells["dgvSelecteer"].Value.ToString()))
                        vAantal++;
                }
                catch (Exception) { ;}
            }
            lblAantalTitels.Text = vAantal.ToString();
        }

        private void cmbLeerling_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                vLeerlingID = int.Parse(cmbLeerling.SelectedValue.ToString());
                DataTable dtLl = leerlingTableAdapter.GetDataByLeerlingID(vLeerlingID);
                if (dtLl.Rows.Count > 0)
                {
                    vGroepCode = dtLl.Rows[0]["groepCode"].ToString();
                    cmbGroep.SelectedValue = vGroepCode;
                    lbLeerling.SelectedValue = cmbLeerling.SelectedValue.ToString();
                }
                updateLeerlingInfo();
            }
            catch (Exception) { ;}

        }

        private void updateLeerlingInfo()
        {
            try
            {
                DataTable ll = leerlingTableAdapter.GetDataByLeerlingID(vLeerlingID);
                lblLeerlingInfo.Text = ll.Rows[0]["naam"].ToString().ToUpper() + " (" + ll.Rows[0]["straat"] + " " + ll.Rows[0]["gemeente"] + ") GROEP:" + ll.Rows[0]["groepCode"];
                btnRegistreer.Enabled = true;
                btnRegistreer.Text = "Registreer afhaling voor " + ll.Rows[0]["naam"].ToString().ToUpper();
            }
            catch (Exception) {
                lblLeerlingInfo.Text = "";
                btnRegistreer.Text = "Registreer afhaling voor  ???";
                btnRegistreer.Enabled = false;
            }
        }

        private void lbLeerling_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                vLeerlingID = int.Parse(lbLeerling.SelectedValue.ToString());
                DataTable dtLl = leerlingTableAdapter.GetDataByLeerlingID(vLeerlingID);
                if (dtLl.Rows.Count > 0)
                    vGroepCode = dtLl.Rows[0]["groepCode"].ToString();
                updateLeerlingInfo();
                updateBrowser();
            }
            catch (Exception ex) {
                lblLeerlingInfo.Text = "";
                btnRegistreer.Text = "Registreer afhaling voor  ???";
                btnRegistreer.Enabled = false;
            }
        }

        private void updateBrowser()
        {
            if (rbtBoeklijst.Checked) vullenViaBoeklijst();
            if (rbtBesteldeBoeken.Checked) vullenViaBestellijstOfRekeningLijst(true);
            if (rbtAangerekendeBoeken.Checked) vullenViaBestellijstOfRekeningLijst(false);
        }


        private void leerlingBoekBestelling_BoekDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            leerlingBoekBestelling_BoekDataGridView.EndEdit();    
            if (leerlingBoekBestelling_BoekDataGridView.Columns[e.ColumnIndex].Name.Equals("dgvHuur") ||
                leerlingBoekBestelling_BoekDataGridView.Columns[e.ColumnIndex].Name.Equals("dgvSelecteer"))
                 berekenTotalen();
        }

        private void txtBetaald_TextChanged(object sender, EventArgs e)
        {
            try
            {
                decimal teBetalen = decimal.Parse(txtBetaald.Text) - decimal.Parse(lblTotaalBedrag.Text);
                lblWisselGeld.Text = teBetalen.ToString();
            }
            catch (Exception) { ;}    
        }

        private void rbtBoeklijst_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtBoeklijst.Checked) vullenViaBoeklijst();
        }

        private void rbtBesteldeBoeken_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtBesteldeBoeken.Checked) vullenViaBestellijstOfRekeningLijst(true);
        }

        private void rbtAangerekendeBoeken_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtAangerekendeBoeken.Checked) vullenViaBestellijstOfRekeningLijst(false);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            toonStatusAfhaling();
            /*int nieuw = 0;
            try { nieuw = onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.GetChanges(DataRowState.Added).Rows.Count; }
            catch (Exception) { ;}
            int update = 0;
            try { update = onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek.GetChanges(DataRowState.Modified).Rows.Count; }
            catch (Exception) { ;}
            MessageBox.Show("Nieuw: " + nieuw + Environment.NewLine + "Update: " + update);*/
        }

        private void toonStatusAfhaling()
        {
            int nieuw = 0;
            int update = 0;
            for (int i = 0; i < leerlingBoekBestelling_BoekDataGridView.Rows.Count; i++)
            {
                if (bool.Parse(leerlingBoekBestelling_BoekDataGridView.Rows[i].Cells["dgvSelecteer"].Value.ToString()))
                {
                    if (onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["datumAfhaling"].ToString().Equals(DBNull.Value.ToString()))
                    {
                        if (int.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["leerlingBoekID"].ToString()) >= 0)
                            update++;
                        else
                            nieuw++;
                    }
                }
            }
            MessageBox.Show("Nieuw: " + nieuw + Environment.NewLine + "Update: " + update);
        }

        private void registreerAfhaling()
        {
            //als naamloze afhaling
            //leerlingboekID op -1
            if (chkNietOpNaam.Checked) vLeerlingID = -1; 
            int vRekeningNr = 0;
            decimal vRekeningTotaal = 0;

            bool vHuurboek = false;
            decimal vSchoolPrijs = 0;
            decimal vHuurPrijs = 0;
            int aantalRekeningLijnen = 0;
            if (chkMaakRekening.Checked) vRekeningNr = int.Parse(rekeningTableAdapter.getMaxRekeningID().ToString())+1;
            try
            {
                for (int i = 0; i < leerlingBoekBestelling_BoekDataGridView.Rows.Count; i++)
                {
                    if (bool.Parse(leerlingBoekBestelling_BoekDataGridView.Rows[i].Cells["dgvSelecteer"].Value.ToString()))
                    {
                        //if (onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["datumAfhaling"].ToString().Equals(DBNull.Value.ToString()))
                        //{
                            aantalRekeningLijnen++;
                            vHuurboek = bool.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["huurboek"].ToString());
                            vSchoolPrijs = decimal.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["schoolPrijs"].ToString());
                            vHuurPrijs = decimal.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["huurPrijs"].ToString());
                            if (vHuurboek) vRekeningTotaal += vHuurPrijs;
                            else vRekeningTotaal += vSchoolPrijs;
                            if (int.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["leerlingBoekID"].ToString()) >= 0)
                            {
                                if (chkMaakRekening.Checked)
                                {
                                    leerlingBoekTableAdapter.UpdateViaAfhalingMetRekening(DateTime.Now, vRekeningNr, 2, int.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["leerlingBoekID"].ToString()));
                                }
                                else
                                {
                                    leerlingBoekTableAdapter.UpdateViaAfhalingZonderRekening(DateTime.Now, 2, int.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["leerlingBoekID"].ToString()));
                                }
                            }
                            else
                            {
                                int vBoekID = int.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["boekID"].ToString());
                                int vBoeklijstItemID = int.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["boeklijstItemID"].ToString());
                                //!!!!!!
                                //!!!!!!
                                //als boeklijstitemID = 0 (boek dat niet uit een boeklijst komt )
                                //moet er een boeklijstItemID lijn bijgemaakt worden (met boeklijstID = -1
                                //anders kan men geen rekeningen maken
                                if (vBoeklijstItemID == 0)
                                {
                                    string vCategorieCode = onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["categorieCode"].ToString();
                                    string vIsbnNr = onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["isbnNr"].ToString();
                                    string vBoeksoortCode = onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["boeksoortCode"].ToString();
                                    boeklijstItemTableAdapter.InsertViaAfhaling(vBoekID, "", vCategorieCode, vHuurboek, vSchoolPrijs, vHuurPrijs, -1, vIsbnNr, vBoeksoortCode);
                                    vBoeklijstItemID = int.Parse(boeklijstItemTableAdapter.getMaxBoeklijstItemID().ToString());
                                }
                                if (chkMaakRekening.Checked)
                                {
                                    leerlingBoekTableAdapter.InsertViaAfhaling(vBoekID, vLeerlingID, DateTime.Now, vRekeningNr, vBoeklijstItemID, 2);
                                }
                                else
                                {
                                    leerlingBoekTableAdapter.InsertViaAfhaling(vBoekID, vLeerlingID, DateTime.Now, null, vBoeklijstItemID, 2);
                                }
                            }
                        //}
                    }
                }
                if (chkMaakRekening.Checked && aantalRekeningLijnen > 0)
                {
                    decimal vBetaaldBedrag = 0;
                    if (chkRekeningBetaald.Checked) vBetaaldBedrag = vRekeningTotaal;
                    rekeningTableAdapter.Insert(DateTime.Now, vRekeningTotaal, txtRekeningOpmerking.Text, 0, vBetaaldBedrag, vLeerlingID);
                    if (chkDrukRekening.Checked)
                    {
                        PrintenRekening p = new PrintenRekening(vRekeningNr, txtRekeningOpmerking.Text, DateTime.Now, int.Parse(nudAantalExemplaren.Value.ToString()), true);
                        MessageBox.Show(p.printRekeningen());
                    }
                }
                wisBrowser();
            }
            
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnRegistreer_Click(object sender, EventArgs e)
        {
            registreerAfhaling();
        }

        private void btnZoekBoekInBoeklijst_Click(object sender, EventArgs e)
        {
            bool inBoeklijsten = true;
            string zoek = txtDeelTitel.Text.Trim();
            ZoekBoek zoekBoek = new ZoekBoek(this, zoek, inBoeklijsten);
            txtDeelTitel.Text = "";
            zoekBoek.ShowDialog();
        }

        private void chkNietOpNaam_CheckedChanged(object sender, EventArgs e)
        {
            if (chkNietOpNaam.Checked)
            {
                pnlLeerling.Visible = false;
                lblLeerlingInfo.Text = "Afhaling NIET op naam";
                btnRegistreer.Text = "Registreer afhaling voor NAAMLOOS";
                vGroepCode = "???";
            }
            else
            {
                pnlLeerling.Visible = true;
                updateLeerlingInfo();
            }
        }

        private void btnPrintRekening_Click(object sender, EventArgs e)
        {
            bool metBoodschap = true;
            bool maakRekening = true;
            if (metBoodschap)
            {
            DialogResult antwoord =  MessageBox.Show("Maak rekening voor de niet aangerekende AFGEHAALDE boeken van deze leerling?","Rekening voor ALLE niet in rekening gebrachte afhalingen",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
            if (antwoord == DialogResult.No) maakRekening = false;
            }
            if (maakRekening)
            {
           
            chkMaakRekening.Checked = false;
            //registreer eventuele afhalingen en haal alle leerlingboeklijnen van leerling op
            registreerAfhaling();
            leerlingBoekBestelling_BoekTableAdapter.FillByLeerlingID(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek,vLeerlingID);
            
            int vRekeningNr = 0;
            decimal vRekeningTotaal = 0;

            bool vHuurboek = false;
            decimal vSchoolPrijs = 0;
            decimal vHuurPrijs = 0;
            int aantalRekeningLijnen = 0;
            vRekeningNr = int.Parse(rekeningTableAdapter.getMaxRekeningID().ToString())+1;
            try
            {
                for (int i = 0; i < leerlingBoekBestelling_BoekDataGridView.Rows.Count; i++)
                {
                    if (int.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["status"].ToString()) == 2)
                    {
                        if (onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["rekeningID"].ToString().Equals(DBNull.Value.ToString()))
                        {
                            aantalRekeningLijnen++;
                            vHuurboek = bool.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["huurboek"].ToString());
                            vSchoolPrijs = decimal.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["schoolPrijs"].ToString());
                            vHuurPrijs = decimal.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["huurPrijs"].ToString());
                            if (vHuurboek) vRekeningTotaal += vHuurPrijs;
                            else vRekeningTotaal += vSchoolPrijs;
                            leerlingBoekTableAdapter.UpdateViaRekening(vRekeningNr, int.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["leerlingBoekID"].ToString()));
                        }
                    }
                }
                if (aantalRekeningLijnen > 0)
                {
                    decimal vBetaaldBedrag = 0;
                    if (chkRekeningBetaald.Checked) vBetaaldBedrag = vRekeningTotaal;
                    rekeningTableAdapter.Insert(DateTime.Now, vRekeningTotaal, txtRekeningOpmerking.Text, 0, vBetaaldBedrag, vLeerlingID);
                    if (chkDrukRekening.Checked)
                    {
                        PrintenRekening p = new PrintenRekening(vRekeningNr, txtRekeningOpmerking.Text, DateTime.Now, 2, true);
                        MessageBox.Show(p.printRekeningen());
                    }
                }
                wisBrowser();
            }
            catch (Exception) { ;}
            }
        }

        private void btnUpdateRekening_Click(object sender, EventArgs e)
        {
            updateRekening(false);
        }

        private void btnUpdateRekeningMetAnnulatie_Click(object sender, EventArgs e)
        {
            updateRekening(true);
        }

        private void updateRekening(bool metAnnulatie)
        {
            List<int> rekeningIDs = new List<int>();
            bool metBoodschap = true;
            bool updateRekening = true;
            if (metBoodschap)
            {
                DialogResult antwoord = MessageBox.Show("De rekening(en) van deze leerling aanpassen?"+Environment.NewLine+
                    "De niet afgehaalde boeken worden van de rekening(en) gehaald en de rekening wordt opnieuw berekend", "Rekeningupdate voor ALLE niet afgehaalde boeken", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (metAnnulatie)
                    antwoord = MessageBox.Show("De rekening(en) van deze lzeerling aanpassen?" + Environment.NewLine +
                   "De niet afgehaalde boeken worden van de rekening(en) gehaald (en GANULLEERD) en de rekening wordt opnieuw berekend", "Rekeningupdate voor ALLE niet afgehaalde boeken", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (antwoord == DialogResult.No) updateRekening = false;
            }
            if (updateRekening)
            {

                chkMaakRekening.Checked = false;
                //registreer eventuele afhalingen en haal alle leerlingboeklijnen van leerling op
                registreerAfhaling();
                leerlingBoekBestelling_BoekTableAdapter.FillByLeerlingID(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek, vLeerlingID);

                int vRekeningNr = 0;
                decimal vRekeningTotaal = 0;

                bool vHuurboek = false;
                decimal vSchoolPrijs = 0;
                decimal vHuurPrijs = 0;
                int aantalRekeningLijnen = 0;
                int vLeerlingBoekID = 0;
                
                try
                {
                    for (int i = 0; i < leerlingBoekBestelling_BoekDataGridView.Rows.Count; i++)
                    {
                        if (int.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["status"].ToString()) < 2)
                        {
                            if (!onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["rekeningID"].ToString().Equals(DBNull.Value.ToString()))
                            {
                                vLeerlingBoekID =  int.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["leerlingBoekID"].ToString());
                                vRekeningNr = int.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["rekeningID"].ToString());
                                if (!rekeningIDs.Contains(vRekeningNr)) rekeningIDs.Add(vRekeningNr);
                                //leerlingBoekTableAdapter.UpdateViaRekening(null, vLeerlingBoekID);
                                if (metAnnulatie)  leerlingBoekTableAdapter.UpdateViaAnnulatieMetRekening(null,DateTime.Now,null,4,vLeerlingBoekID);
                                else               leerlingBoekTableAdapter.UpdateViaAfhalingMetRekening(null,null,0,vLeerlingBoekID);
                                aantalRekeningLijnen++;
                            }
                        }
                    }
                    if (aantalRekeningLijnen > 0)
                    {
                        leerlingBoekBestelling_BoekTableAdapter.FillByLeerlingID(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek, vLeerlingID);
                        foreach (int vRekeningID in rekeningIDs)
                        {
                            vRekeningTotaal = 0;
                            for (int i = 0; i < leerlingBoekBestelling_BoekDataGridView.Rows.Count; i++)
                            {
                                if (!onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["rekeningID"].ToString().Equals(DBNull.Value.ToString()))
                                {
                                    if (int.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["rekeningID"].ToString()) == vRekeningID)
                                    {
                                        try
                                        {
                                            vHuurboek = bool.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["huurboek"].ToString());
                                            vSchoolPrijs = decimal.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["schoolPrijs"].ToString());
                                            vHuurPrijs = decimal.Parse(onsBoekenPakketDataSet.LeerlingBoekBestelling_Boek[i]["huurPrijs"].ToString());
                                            if (vHuurboek) vRekeningTotaal += vHuurPrijs;
                                            else vRekeningTotaal += vSchoolPrijs;
                                        }
                                        catch (Exception ex) { MessageBox.Show(ex.Message); }
                                    }
                                }
                            }
                            rekeningTableAdapter.UpdateTotaal(vRekeningTotaal, vRekeningID);
                        }
                    }
                    if (aantalRekeningLijnen > 0)
                    {
                        
                        if (chkDrukRekening.Checked)
                        {
                            PrintenRekening p = new PrintenRekening(rekeningIDs, txtRekeningOpmerking.Text, DateTime.Now, 2, true);
                            p.printRekeningen();
                        }
                    }
                    wisBrowser();
                }
                catch (Exception ex) { MessageBox.Show(ex.Message);}
            }
        }


        private void btnWijzigVanGroep_Click(object sender, EventArgs e)
        {
            int index = cmbLeerling.SelectedIndex;
            LeerlingGroepVerandering lgv = new LeerlingGroepVerandering(lblLeerlingInfo.Text, vLeerlingID, "",vGroepCode,false);
            lgv.ShowDialog();
            this.leerlingTableAdapter.Fill(this.onsBoekenPakketDataSet.Leerling);
            cmbLeerling.SelectedIndex = index;
           
        }

        private void btnAanUit_Click(object sender, EventArgs e)
        {
            selecteerAan = !selecteerAan;
            for (int i = 0; i < leerlingBoekBestelling_BoekDataGridView.Rows.Count; i++)
            {
                if (!leerlingBoekBestelling_BoekDataGridView.Rows[i].ReadOnly)
                    leerlingBoekBestelling_BoekDataGridView.Rows[i].Cells["dgvSelecteer"].Value = selecteerAan;
            }
            berekenTotalen();
        }

        private void cmbOpmerking_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmbOpmerking.SelectedIndex > 0)
            {
                string ID = cmbOpmerking.SelectedItem.ToString();
                if (ID.Equals(InstParameters.Default.vPrintOpmerkingID1))
                    txtRekeningOpmerking.Text = InstParameters.Default.vPrintOpmerking1;
                if (ID.Equals(InstParameters.Default.vPrintOpmerkingID2))
                    txtRekeningOpmerking.Text = InstParameters.Default.vPrintOpmerking2;
                if (ID.Equals(InstParameters.Default.vPrintOpmerkingID3))
                    txtRekeningOpmerking.Text = InstParameters.Default.vPrintOpmerking3;
            }
            else
                txtRekeningOpmerking.Text = "";

        }
        

       

                
            
    }
}